var url_root = 'http://localhost:8080/project_base/';
var url_static = 'http://localhost:8080/project_base/static/';

/**
 * 常用工具方法
 * @Date: 2017-08-09
 */
require(['jquery', 'layer'], function($, layer) {
	var hope = (function() {
        // 构建hope对象
        var hope = {};

        return hope;
    })();
    window.hope = hope;
    
    (function($, hope) {
        hope.utils = {
            isArray: function(obj) {
                return Object.prototype.toString.call(obj) === '[object Array]';
            },
            isFunction: function(obj) {
                return Object.prototype.toString.call(obj) === '[object Function]';
            },
            // 获取字符串的长度 中文长度:2  英文长度:1
            getStrLength: function(str) {
                return str.replace(/[\u0391-\uFFE5]/g, "aa").length;
            },
            // 判读变量是否为空,值等于 null 或 undefined
            isEmpty: function(str) {
                if (str === 'null' ||
                    str === 'undefined' ||
                    str === '' ||
                    str === null ||
                    str === undefined) {
                    return true;
                } else {
                    return false;
                }
            },
            // 无数据处理 避免用户看到null undefined 等
            noNull: function(str, replaceTxt) {
                var flag = false;
                str = $.trim(str);

                if (str === 'null' ||
                    str === 'undefined' ||
                    str === '' ||
                    str === null ||
                    str === undefined) {
                    flag = true;
                }

                if (flag) {
                    return replaceTxt || '';
                } else {
                    return str;
                }
            },
            /**
             * 转换输入值为数字
             * 如果转换失败，返回原值
             */
            toNumber: function(val) {
                var n = parseFloat(val);
                return isNaN(n) ? val : n;
            }
        };

        // 日期操作
        hope.date = {
            /**
             * 按照规定的格式 格式化日期
             * @param {object} date 日期类型的日期
             * @param {string} type yyyy-mm-dd hh:mm:ss
             *                      yyyy/mm/dd hh:mm:ss
             */
            formate: function(date, type) {
                var self = this;
                var t = new Date(date);
                var newDate = '';

                if (t !== 'Invalid Date') {
                    var r = self.outDateInfo(t);
                    if (type === 'yyyy-mm-dd hh:mm:ss') {
                        newDate = r.date_year + '-' + r.date_month + '-' + r.date_day + ' ' +
                            r.date_hour + ':' + r.date_minute + ':' + r.date_seconds;
                    } else if (type === 'yyyy-mm-dd') {
                        newDate = r.date_year + '-' + r.date_month + '-' + r.date_day + ' ';
                    }
                }

                return newDate;
            },
            /**
             * 将一个日期格式的字符串 返回对应的年月日时分秒 前面自动补0
             * @param date
             * @returns {object}
             */
            outDateInfo: function(date) {
                var date_day = date.getDate();
                var date_month = date.getMonth() + 1;
                var date_year = date.getFullYear();
                var date_hour = date.getHours();
                var date_minute = date.getMinutes();
                var date_seconds = date.getSeconds();

                parseInt(date_month) < 10 ? date_month = ('0' + date_month) : date_month;
                parseInt(date_day) < 10 ? date_day = ('0' + date_day) : date_day;
                parseInt(date_hour) < 10 ? date_hour = ('0' + date_hour) : date_hour;
                parseInt(date_minute) < 10 ? date_minute = ('0' + date_minute) : date_minute;
                parseInt(date_seconds) < 10 ? date_seconds = ('0' + date_seconds) : date_seconds;

                return {
                    date_year: date_year,
                    date_month: date_month,
                    date_day: date_day,
                    date_hour: date_hour,
                    date_minute: date_minute,
                    date_seconds: date_seconds
                };
            },
            /**
             * 转换成日期格式
             * @param {string} dateString 日期字符串
             * @returns {object}
             */
            toDate: function(dateString) {
                var t = new Date(dateString),
                    result = dateString;

                if (t !== 'Invalid Date') {
                    result = t;
                }
                return result;
            },
            /**
             * 获取前天、昨天、今天、明天、后天的时间
             * @param AddDayCount -2 前天  -1 昨天  0 今天  1 明天  2 后天  3 大后天
             * @returns {Date}
             */
            dateDelay: function(AddDayCount) {
                var dd = new Date();
                dd.setDate(dd.getDate() + AddDayCount); // 获取AddDayCount天后的日期
                return dd;
            }
        };

        // 正则表达式
        hope.regExp = {

        };
    })($, hope);

    /**
     * sessionStorage封装
     * @Date: 2017-08-02
     */
    (function($, hope) {
        hope.session = {
        		init: function() {
        			var self = this;
        			// 登录用户信息
        			self.set('user_info', {});
        			// 用户的按钮权限数据
        			self.set('user_button_list', []);
        			// 用户的菜单权限数据
        			self.set('user_menu_list', []);
        		},
            sessionData: sessionStorage,
            set: function(key, value) {
                sessionStorage.setItem(key, value);
            },
            get: function(key) {
                return sessionStorage.getItem(key);
            },
            remove: function(key) {
                sessionStorage.removeItem(key);
            }
        };
        
        hope.session.init();
    })($, hope);

    /**
     * ajax
     * 
     * @Date: 2017-08-15
     */
    (function($, hope) {
        hope.ajax = {
            initOption: function(option) {
                option = option || {};

                option.url = option.url || '';
                option.data = option.data || '';
                option.type = option.type || 'post';
                option.dataType = option.dataType || 'json';
                option.contentType = option.contentType || 'application/json';
                option.async = option.async || true;
                option.statusCode = option.statusCode || '';
                option.success = option.success || null;
                option.error = option.error || null;
                option.loading = option.loading || function() {
                    return {
                        index: null,
                        showLoading: function() {
                            this.index = layer.load(1, {
                                shade: [0.1, '#000'] // 显示遮罩层
                            });
                        },
                        hideLoading: function() {
                            var index = this.index;
                            // 关闭遮罩层
                            layer.close(index);
                        }
                    };
                }();
                option.timeoutNumber = option.timeoutNumber || 1000 * 60 * 5; // 默认超时时间五分钟

                return option;
            },
            getData: function(option) {
                var index_load = null;
                option = this.initOption(option);
                try {
                    $.ajax({
                        url: option.url,
                        data: option.data,
                        async: option.async,
                        type: option.type,
                        dataType: option.dataType,
                        contentType: option.contentType,
                        statusCode: option.statusCode,
                        timeoutNumber: option.timeoutNumber,
                        beforeSend: function() {
                            option.loading.showLoading();
                        },
                        complete: function() {
                            option.loading.hideLoading();
                        },
                        success: function(data) {
                            // 公共code码判断
                            if (data.code === '0') { // 成功
                                if (typeof option.success === 'function') {
                                    option.success(data);
                                }
                            } else if (data.code === '-1') { // 无权限
                                layer.msg(data.msg);
                            } else {
                                // 出错提示用户
                                layer.msg(data.msg, function() {
                                    window.location.href = url_root + 'login.html';
                                });
                            }
                        },
                        error: function(data) {
                            // 关闭遮罩层
                            option.loading.hideLoading();

                            if (typeof option.error === 'function') {
                                option.error(data);
                            } else {
                                // 出错提示用户
                                layer.msg(hope.words.error[0]);
                            }
                        }
                    });
                } catch (e) {
                    // 出错提示用户
                    layer.msg(hope.words.error[0]);
                }
            }
        };
    })($, hope);

    /**
     * 一些常用的话术
     */
    (function($, hope) {
        hope.words = {
            error: []
        };

        hope.words.error[0] = '数据请求出错了！';
        hope.words.error[1] = '地图加载出错了！';
    })($, hope);
});